package educar.controllers;


import java.io.File;
import java.io.IOException;

import educar.gui.IView;
import educar.gui.teacher.EditActividad;
import educar.idioma.Locale;

import educar.listeners.FileUtils;
import educar.models.Actividad;
import educar.models.Materia;

public class EditActividadController implements IController {

	private EditActividad view;
	
	public void process(String model){
		if(null!=view) {
			String codigo = view.getCode();
			String descripcion = view.getDescription();
			File archivo = view.getArchivo();
			Materia materia = view.getMateria();
			Actividad actividad = view.getActividad();
			String file_path;
			if(codigo.length()==0 ||descripcion.length()==0) {
				view.presentWarning(Locale.EMPTY_FIELDS, Locale.ERROR);
			}
			else {
				/*si se guardan los cambios primero borro la actividad vieja para reemplazarla*/
				actividad.destroy();
				/*si no cambia el archivo lo matengo*/
				if (archivo==null) {
					file_path = actividad.getFile_path();
				}
				/*si cambia creo el archivo nuevo*/
				/*borro el viejo antes */
				else {
					try {
						borrarArchivo(actividad.getFile_path(), materia, codigo);
					} catch (IOException e1) {
						e1.printStackTrace();
					}
					file_path = codigo+"."+archivo.getName();
					try {
						guardarArchivo(archivo,materia,codigo);
					} catch (IOException e) {
						view.presentWarning(Locale.CANT_SAVE_FILE, Locale.ERROR);
						return;
					}
				}
				Actividad newActividad = new Actividad("", codigo, materia, descripcion, file_path);
				boolean result = newActividad.save();
				if (!result) {
					view.presentWarning(Locale.CODE_IN_USE, Locale.ERROR);
				}
				view.present(Locale.ACTIVITY+" "+Locale.SAVED);
				view.close();
			} 
		}	
	}
	
	
	/**
	 * Permite guardar el archivo que se seleccione
	 * @param archivo "File con el archivo selecionado"
	 * @param materia "Materia sobra la que se crea la actividad"
	 * @param codigoActividad "codigo de la actividad"
	 * @throws IOException
	 */
	private void guardarArchivo(File archivo,Materia materia,String codigoActividad) throws IOException {
		String appPath = System.getProperties().getProperty("user.dir")+File.separator+"activity_files";
		String materiaPath = appPath+File.separator+materia.getCodigo();
		FileUtils.validateDir(materiaPath,true);
		String archivoPath = materiaPath+File.separator+codigoActividad+"."+archivo.getName();
		File destino = new File(archivoPath);
		FileUtils.copy(archivo, destino);
	}
	
	
	/**
	 * Permite borrar el archivo asosiado a la actividad
	 * @param file_path "path del file guardado en base de datos"
	 * @throws IOException
	 */
	private void borrarArchivo(String file_path,Materia materia,String codigoActividad) throws IOException {
		String appPath = System.getProperties().getProperty("user.dir");
		String archivoPath = appPath+File.separator+"activity_files"+File.separator+materia.getCodigo()+File.separator+codigoActividad+"."+file_path;
		File origen = new File(archivoPath);
		FileUtils.delete(origen);		
	}
	
	
	public void setView(IView view) {
		this.view = (EditActividad) view;		
	}	
}